package com.itheima.d6_lambda;

//目标：掌握Lambda表达式的省略写法
public class Demo03 {
    public static void main(String[] args) {
        /**
         * 省略规则：
         *      1.参数类型可以省略不写。
         *      2.如果只有一个参数，参数类型可以省略，同时()也可以省略。
         *      3.如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号！
         *      4.如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。
         *      此时，如果这行代码是return语句，必须省略return不写，同时也必须省略";"不写
         *
         * 需求：使用Lambda表达式的省略写法简化A、B、C、D四个接口的匿名内部类对象
         */
        //1.定义A接口的匿名内部类
        LambdaInterA a = new LambdaInterA() {
            @Override
            public String intToStr(int num) {
                //功能：将int类型数字num，转换成String类型字符串返回
                return Integer.toString(num);
            }
        };


        LambdaInterA lambdaA = num -> Integer.toString(num);

        //2.定义B接口的匿名内部类，并使用Lambda简化
        LambdaInterB b = new LambdaInterB() {
            @Override
            public void printStr(String str) {
                //功能：打印字符串str
                System.out.println(str);
            }
        };

        LambdaInterB lambdaB = str -> System.out.println(str);

        //3.定义C接口的匿名内部类，并使用Lambda简化
        LambdaInterC c = new LambdaInterC() {
            @Override
            public String[] getStrs(String src, String regex) {
                //功能：使用String的split方法，将字符串src根据字符串regex进行切割，返回切割后的字符串数组
                return src.split(regex);
            }
        };

        LambdaInterC lambdaC = (src, regex) -> src.split(regex);

        //4.定义D接口的匿名内部类，并使用Lambda简化
        LambdaInterD d = new LambdaInterD() {
            @Override
            public String getStr(char[] chs) {
                //功能：将字符数组chs转成String对象返回
                return new String(chs);
            }
        };

        LambdaInterD lambdaD = chs -> new String(chs);
    }
}
